package com.atguigu.zy.interview.juc.volatiles;

/**
 * @Author : Jungle
 * @Description : 指令重拍
 */
public class ResortReqDemo {
    int a = 0;
    boolean flag = false;

    public void method01() {
        //多线程a 和 flag指令重排，结果可能是5 和 6
        a = 1;
        flag = true;
    }
    //多线程环境中交替执行，由于编译器优化，并行指令重排，和内存系统重排
    //两个线程中使用的变量能否保证一致性是无法确定的，结果无法预测

    public void method02() {
        if (flag) {
            a = a + 5;
            System.out.println("*********:" + a);
        }
    }




    public static void main(String[] args) {
        for (int i = 1; i <= 10000; i++) {
            new Thread(() -> {
                ResortReqDemo reqDemo = new ResortReqDemo();
                reqDemo.method01();
                reqDemo.method02();
            }, String.valueOf(i)).start();
        }
    }
}
